home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-09-11 | 3.0 KB | 152 lines | [TEXT/PJMM] |
- unit MyMemory;
-
- interface
-
- {$IFC undefined THINK_Pascal}
- uses
- Types;
- {$ENDC}
-
- function MNewPtr (var p: univ ptr; size: longInt): OSErr;
- function MNewHandle (var h: univ handle; size: longInt): OSErr;
- function MSetPtrSize (var p: univ ptr; size: longInt): OSerr;
- function MSetHandleSize (var h: univ handle; size: longInt): OSerr;
- procedure MDisposePtr (var p: univ ptr);
- procedure MDisposeHandle (var h: univ handle);
- procedure MFill (p: univ ptr; size: longInt; val: integer);
- procedure MFillLong (p: univ ptr; size: longInt; val: longInt);
- { ptr and size must be long alligned }
- procedure LockHigh (h: univ handle);
- procedure HLockState (h: handle; var state: SignedByte);
- procedure HUnlockState (h: handle; var state: SignedByte);
-
- implementation
-
- {$IFC undefined THINK_Pascal}
- uses
- Memory;
- {$ENDC}
-
- {$SETC debug_memory=0 }
-
- const
- fill_byte = $E5; { odd, big, negative, easily recognizable }
-
- function CheckPtr (p: ptr): boolean;
- begin
- {$IFC debug_memory }
- if p = nil then begin
- DebugStr('Memory Error!');
- end;
- {$ENDC}
- CheckPtr := p <> nil;
- end;
-
- function MNewPtr (var p: univ ptr; size: longInt): OSErr;
- var
- err: OSErr;
- begin
- p := NewPtr(size);
- err := MemError;
- {$IFC debug_memory }
- if (err = noErr) then begin
- MFill(p, GetPtrSize(p), fill_byte);
- end;
- {$ENDC}
- MNewPtr := err;
- end;
-
- function MNewHandle (var h: univ handle; size: longInt): OSErr;
- var
- err: OSErr;
- begin
- h := NewHandle(size);
- err := MemError;
- {$IFC debug_memory }
- if (err = noErr) then begin
- MFill(h^, GetHandleSize(h), fill_byte);
- end;
- {$ENDC}
- MNewHandle := err;
- end;
-
- function MSetPtrSize (var p: univ ptr; size: longInt): OSerr;
- begin
- SetPtrSize(p, size);
- MSetPtrSize := MemError;
- end;
-
- function MSetHandleSize (var h: univ handle; size: longInt): OSerr;
- begin
- SetHandleSize(h, size);
- MSetHandleSize := MemError;
- end;
-
- procedure MDisposePtr (var p: univ ptr);
- begin
- if CheckPtr(p) then begin
- {$IFC debug_memory }
- MFill(p, GetPtrSize(p), fill_byte);
- {$ENDC}
- DisposPtr(p);
- end;
- p := nil;
- end;
-
- procedure MDisposeHandle (var h: univ handle);
- begin
- if h <> nil then begin
- {$IFC debug_memory }
- MFill(h^, GetHandleSize(h), fill_byte);
- {$ENDC}
- DisposeHandle(h);
- h := nil;
- end;
- end;
-
- procedure MFill (p: univ ptr; size: longInt; val: integer);
- var
- i: longInt;
- begin
- if CheckPtr(p) then begin
- for i := longInt(p) to longInt(p) + size - 1 do begin
- ptr(i)^ := val;
- end;
- end;
- end;
-
- procedure MFillLong (p: univ ptr; size: longInt; val: longInt);
- type
- longPtr = ^longInt;
- var
- i: longInt;
- begin
- if CheckPtr(p) then begin
- i := longInt(p);
- while size > 3 do begin
- longPtr(i)^ := val;
- i := i + 4;
- size := size - 4;
- end;
- end;
- end;
-
- procedure LockHigh (h: univ handle);
- begin
- MoveHHi(h);
- HLock(h);
- end;
-
- procedure HLockState (h: handle; var state: SignedByte);
- begin
- state := HGetState(h);
- HLock(h);
- end;
-
- procedure HUnlockState (h: handle; var state: SignedByte);
- begin
- state := HGetState(h);
- HUnlock(h);
- end;
-
- end.